package com.kayb.patterns.behavioral;

import java.util.ArrayList;
import java.util.List;

/**
 * 观察者模式：当一个对象状态变化时，其他依赖该对象的对象都会受到通知，随着变化
 * 实现：在需要通知的地方调用被通知对象
 * 场景：有状态变化时，需要将变更刷新给依赖类
 * @author huangkaibin
 * @date 2018-08-28
 **/
public class Observe {

    interface Observer {
        void notify(String str);
    }

    static class Service {

        private List<Observer> list = new ArrayList<>();
        public void addObserver(Observer observer) {
            list.add(observer);
        }

        public void update(String str) {
            // do business

            // notify
            for(Observer observer : list) {
                observer.notify(str);
            }
        }

    }

    static class Observe1 implements Observer {
        @Override
        public void notify(String str) {
            System.out.println("Observe1 is on notifying " + str);
        }
    }

    public static void main(String[] args) {
        Service service = new Service();
        service.addObserver(new Observe1());

        service.update("test");
    }

}
